[C] Apaga linha em um Arquivo
Publicado por Enzo de Brito Ferber 06/03/2006
[ Hits: 18.065 ]
Homepage: http://www.maximasonorizacao.com.br
Este script apaga a linha "dita" por um
usuário de um arquivo "dito" pelo mesmo.
Código de minha autoria bem comentado
e simples.... ajuda bastante a entender
manipulação de arquivos, aloção
dinamina de memoria, e maniputação de
strings....
/*********************************************************************************************
Programa: apaga.c
Autor: Enzo Ferber 'Slackware_10'
Propósito: Apaga linha definida por usuário em um arquivo
**********************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int abreArquivo(char arquivo[]){
FILE *arqEntrada;
FILE *arqSaida;
int line = 0;
int linha = 1;
int i;
char textoArquivo[100];
char *output;
output = (char *)malloc((strlen(arquivo)+strlen(".editado")) * sizeof(char));
strcat(output, arquivo);
strcat(output, ".editado");
if((arqEntrada = fopen(arquivo, "r")) == 0){ //testa se o arquivo pode ser aberto
printf("Impossivel abrir arquivo...\n"); //informa o erro
exit(1); //finaliza execução
}
if((arqSaida = fopen(output, "w")) == 0){ //testa se o arquivo pode ser aberto
printf("Impossivel abrir arquivo...\n"); //informa o erro
exit(1); //finaliza execução
}
printf("Digite a linha a ser apagada no arquivo: "); //pede a linha
scanf("%d", &line); //le a linha e armazena na variável 'line'
rewind(arqEntrada); //certifica de que o cursor esta no primeiro caractere do arquivo
for(i = 0; !feof(arqEntrada);i++){ //incrementa 'i' enquando não for fim de arquivo
memset(textoArquivo, '{FONTE}', 100); //inicializa e/ou limpa string 'textoArquivo'
fgets(textoArquivo, 101, arqEntrada); //pega uma string de 100 caracteres
if(linha == line){ //se a linha for a escolhida
fputc('\n', arqSaida); //troca a linha que o usuario quer por nova linha
linha = linha + 1; //incrementa o contador de linhas
continue; //volta ao inicio do loop sem executar o resto
}
linha = linha + 1; //incrementa o contador de linas
fputs(textoArquivo, arqSaida); //coloca a string 'textoArquivo' no arquivo encoded.txt
}
printf("O arquivo output %c: %s\n",233, output);
free(output); //desaloca espaço alocado para string contendo novo do novo arquivo
fclose(arqEntrada); //fecha a stream 'arqEntrada'
fclose(arqSaida); //fecha a stream 'arqSaida'
}
int main(void){ //rotina principal do programa
char arquivo[100];
printf("Digite o caminho completo do arquivo: ");
__fpurge(stdin); //limpa buffer de entrada
scanf("%[^\n]", arquivo);
abreArquivo(arquivo);
}
Barra de progresso em forma de “roda”
Leitura de arquivo texto separando as colunas
Editar o arquivo /etc/rc.d/rc.local
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
[Resolvido] VirtualBox can't enable the AMD-V extension
Como verificar a saúde dos discos no Linux
Como instalar , particionar, formatar e montar um HD adicional no Linux?
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Não consigo instalar distro antiga no virtualbox nem direto no hd (14)
Quais os códigos mais dificeis que vcs sabem fazer? (12)
systemd-resol... precisa ser reiniciado periodicamente [RESOLVIDO] (7)









